﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace Rise.Personagens
{
    class Inimigo
    {

        //instancias
        protected Texture2D textura;
        public Vector2 posicao;
        protected Vector2 velocidade;
        protected Rectangle origem;
        protected Rectangle destino;
        protected float rotacao;
        protected Vector2 pivo;
        protected bool direita;
        public bool visivel;
        public int especie;
        public float camada;
        protected float alfa;
        protected Color cor;
        protected Rectangle colisao;
        protected Random random;
        protected int randomico;
        public int vida;
        
        public Rectangle Colisao
        {
            get
            {
                return new Rectangle((int)posicao.X, (int)posicao.Y, 64, 64);
            }

            set
            {

                colisao = value;

            }

        }

        public struct animacao
        {
            public int quadro_X;
            public int quadro_Y;
            public int qtd_quadros;
            public int quadros_seg;
            public int Y;
        }

        animacao perseguindo;
        public animacao animacao_atual;

        public Inimigo(Texture2D textura, int especie, GameWindow window)
        {
            perseguindo.qtd_quadros = 3;
            perseguindo.quadro_X = 89;
            perseguindo.quadro_Y = 81;
            perseguindo.quadros_seg = 3;
            perseguindo.Y = 0;

            animacao_atual = perseguindo;
              
            random = new Random();
            this.textura = textura;
            this.vida = 250;
            randomico = random.Next(0, window.ClientBounds.Width);
            this.posicao = new Vector2(400, 100);
            this.velocidade = new Vector2(5, 5);
            this.origem = new Rectangle(0, 0, textura.Width, textura.Height);
            this.destino = new Rectangle(0, 0, origem.Width, origem.Height);
            this.rotacao = 0;
            this.pivo = Vector2.Zero;
            this.direita = true;
            this.visivel = true;
            this.camada = 1.0f;
            this.alfa = 1f;
            this.cor = new Color(1.0f, 1.0f, 1.0f, alfa);
            this.especie = especie;
            

        }

        public void Update(GameTime gameTime, GameWindow window)
        {
            
            switch (especie)
            {

                case 0:
                    posicao.X += velocidade.X;
                    posicao.Y += velocidade.Y;
                    if (posicao.X >= window.ClientBounds.Width - destino.Width)
                    {
                        velocidade.X *= -1;
                    }

                    if (posicao.Y >= window.ClientBounds.Height - destino.Height)
                    {
                        velocidade.Y *= -1;
                    }

                    if (posicao.Y <= 0)
                    {
                        velocidade.Y *= -1;
                    }

                    if (posicao.X <= 0)
                    {
                        velocidade.X *= -1;
                    }
                    break;

                case 1:
                    //inimigo persegue personagem
                    break;

            }

        }

        public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {

            if(visivel)
              spriteBatch.Draw(textura, posicao, Color.White);

        }

        public void Draw(GameTime gameTime, SpriteBatch spriteBatch, animacao _animacao)
        {

            if (visivel)
            {
                int frame = (int)(gameTime.TotalGameTime.TotalSeconds * _animacao.quadros_seg) % _animacao.qtd_quadros;
                spriteBatch.Draw(
                      textura,
                        new Rectangle(
                            (int)posicao.X,
                            (int)posicao.Y,
                            _animacao.quadro_X,
                            _animacao.quadro_Y),
                        new Rectangle(
                            frame * _animacao.quadro_X,
                            _animacao.Y,
                            _animacao.quadro_X,
                            _animacao.quadro_Y),
                        new Color(
                            1.0f * alfa,
                            1.0f * alfa,
                            1.0f * alfa,
                            alfa),
                        rotacao,
                        pivo,
                        (direita) ? SpriteEffects.None : SpriteEffects.FlipHorizontally,
                        camada);
            }

        }

        public bool Colidiu(Objetos.Plataforma plataforma)
        {
            if (Colisao.Intersects(plataforma.Colisao))
            {

                return true;

            }
            else
            {

                return false;

            }
            

        }

    }


}
